// P10449 费解的开关
#include <iostream>
#include <cstring>
using namespace std;
const int N = 10;
int n = 5;
int a[N]; // 二进制存储开关的状态
int t[N]; // 备份a数组

int cal(int x)
{
    int ret = 0;
    while(x)
    {
        x &= (x - 1);
        ret++;
    }
    return ret;
}

int main()
{
    int T;
    cin >> T;
    while(T--)
    {
        // 每次测试前，一定要将a数组清空
        memset(a, 0, sizeof a);
        for(int i = 0;i < n;i++)
        {
            for(int j = 0;j < n;j++)
            {
                char ch;
                cin >> ch;
                // 存相反的，从全亮变全灭
                if(ch == '0') a[i] |= 1 << j;
            }
        }

        int ret = 0x3f3f3f3f;
        // 枚举第一行的按法
        for(int st = 0;st < (1 << n);st++)
        {
            // 备份a数组
            memcpy(t, a, sizeof a);
            int push = st;
            int cnt = 0;

            // 依次计算接下来行的结果和按法
            for(int i = 0;i < n;i++)
            {
                cnt += cal(push);
                // 修改当前行被按的状态
                t[i] = t[i] ^ push ^ (push << 1) ^ (push >> 1);
                // 消除影响
                t[i] &= (1 << n) - 1;
                //修改下一行的状态
                t[i + 1] ^= push;
                // 下一行的按法
                push = t[i];
            }
            if(t[n - 1] == 0) ret = min(ret, cnt);
        }
        if(ret > 6) cout << -1 << endl;
        else cout << ret << endl;
    }
    return 0;
}